// 热更新相关js
const { app } = require('electron')
const admZip = require('adm-zip'); // 压缩解压插件
const request = require('request');
const fs = require('fs');
const path = require('path');
// const baseUrl = path.resolve("./") + "/resources/"; //打包后 asar 解压后app 的地址 
const baseUrl = !app.isPackaged ? './' : path.join(path.dirname(app.getPath('exe')), '/resources/'); //打包后 asar 解压后app 的地址 
const fileUrl = 'http://download.t.huichuangmedia.cn/' // 服务端 包， package.json存放位置
const notPackaged = !app.isPackaged
let currentPackageJsonData = null
let publicPackageJsonPath = !app.isPackaged ? './package.json' : path.join(path.dirname(app.getPath('exe')), '/resources/public/package.json')
// console.log(publicPackageJsonPath)
/**
 * 更新
 */
const downLoad = () => {
    return new Promise((resolve, reject) => {
        const stream = fs.createWriteStream(`${baseUrl}app.zip`);
        const url = `${fileUrl}app.zip`;
        request(url).pipe(stream).on('close', () => {
            const unzip = new admZip(`${baseUrl}app.zip`); //下载压缩更新包
            unzip.extractAllTo(`${baseUrl}`, /*overwrite*/ true); //解压替换本地文件
            resolve()
        });
    })
}
const getVersion = () => {
    return new Promise((resolve, reject) => {
        fs.readFile(publicPackageJsonPath, function (err, data) {
            resolve(JSON.parse(data).version)
        })
    })

}
module.exports = {
    iceGetVersion: () => {
        return new Promise((resolve, reject) => {
            getVersion().then((version) => {
                resolve(version)
            })
        })
    },
    hotUpdate: () => {
        return new Promise((resolve, reject) => {
            request({
                url: `${fileUrl}package.json`, //请求package.json，与本地对比版本号
            },
                (error, res, body) => {
                    try {
                        if (error || res.statusCode !== 200) {
                            resolve('No package.json found')
                        }
                        const json = JSON.parse(body);
                        currentPackageJsonData = json
                        const {
                            version
                        } = json;
                        getVersion().then(localVersion => {
                            // 如果版本号相同 或者 不是打包状态（开发环境）直接return
                            console.log(version)
                            console.log(localVersion)
                            // return
                            if (version === localVersion) {
                                resolve('Same version number, no need to update')
                            } else {
                                resolve('【需要更新】')
                            }
                        })

                    } catch (err) {
                        reject(err);
                    }
                })
        })
    },
    downLoad: () => {
        return new Promise((resolve, reject) => {
            try {
                downLoad()
                    .then(() => {
                        // 原来这里不起作用
                        // app.setVersion(currentVersion);
                        // console.log(app.getVersion())
                        // resolve('升级完成')
                        // app.relaunch({
                        //     args: process.argv.slice(1)
                        // });
                        // app.exit(0);
                        // 以下被注释的内容，无非就是更新一下版本号，还不好用，何必呢？ 用上面的app.setVersion(currentVersion);不香吗？
                        // 后来因为app.setVersion(currentVersion);更新不了版本号，又把下面放开了
                        // fs.readFile(`${path.join(__dirname, '../dist/package.json')}`, function (err, data) {
                        fs.writeFile(publicPackageJsonPath, JSON.stringify(currentPackageJsonData), function (err) {
                            if (err) {
                                return console.error(err);
                            }
                            reject(err)
                            app.relaunch({
                                args: process.argv.slice(1)
                            });
                            app.exit(0);
                            resolve('重启成功')
                        });
                    })
            } catch (err) {
                reject(err);
            }
        })
    }
};

